﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using DAL;
using DataAccessComponents;
using System.Collections.ObjectModel;

namespace BusinessLogicLayer
{
    public class OfertaBL : IBusinessLogicLayer<Oferta>
    {
        private DbOperations dal = new DbOperations();

        /// <summary>
        /// Funkcja dodawająca oferta do bazy danych
        /// </summary>
        /// <param name="objDodaj">Obiekt Oferta</param>
        /// <returns></returns>
        public int dodaj(Oferta objDodaj)
        {            
            return dal.dodajOferta(objDodaj);
        }

        /// <summary>
        /// Funkcja usuwająca oferta z bazy danych
        /// </summary>
        /// <param name="idusun">Id oferta do usunięcia</param>
        public void usun(int idusun)
        {
            TerminBL terminBL = new TerminBL();
            // usuwanie wszystkich terminów z oferty
            terminBL.usun(terminBL.pobierzListe(idusun));
            dal.usunOferta(idusun);
        }

        /// <summary>
        /// Funkcja akutualizująca oferta w bazie danych
        /// </summary>
        /// <param name="objDodaj">Obiekt oferta zawierający inforamacje do aktualizacji</param>
        public void aktualizuj(Oferta objAktualizuj)
        {
            KategoriaBL katBL = new KategoriaBL();
            HotelBL hotelBL = new HotelBL();
            if (objAktualizuj.Id_oferta == 0)
            {
                this.dodaj(objAktualizuj);
            }
            else
            {
                dal.aktualizujOferta(objAktualizuj);
                katBL.aktualizuj(objAktualizuj.Kategoria);
                hotelBL.aktualizuj(objAktualizuj.Hotel);
            }
        }

        /// <summary>
        /// Pobiera oferta na podstawie id oferta
        /// </summary>
        /// <param name="idusun">Id oferta</param>
        /// <returns>Obiekt Oferta</returns>
        public Oferta pobierz(int idpobierz)
        {
            KategoriaBL katBL = new KategoriaBL();
            HotelBL hotelBL = new HotelBL();
            Oferta oferta = dal.pobierzOferta(idpobierz);
            LinieLotniczeBL linielotniczeBL = new LinieLotniczeBL();

            oferta.Hotel = hotelBL.pobierz(oferta.Id_hotelu);
            oferta.Kategoria = katBL.pobierz(oferta.Id_kategoria);
            oferta.Linielotnicze = linielotniczeBL.pobierz(oferta.Id_linielotnicze);
            return oferta;
        }

        public ObservableCollection<Oferta> pobierzListe()
        {
            ObservableCollection<Oferta> tmp = dal.pobierzListaOferta();
            KategoriaBL katBL = new KategoriaBL();
            HotelBL hotelBL = new HotelBL();
            LinieLotniczeBL linielotniczeBL = new LinieLotniczeBL();
            foreach (Oferta oferta in tmp)
            {
                oferta.Kategoria = katBL.pobierz(oferta.Id_kategoria);
                oferta.Hotel = hotelBL.pobierz(oferta.Id_hotelu);
                oferta.Linielotnicze = linielotniczeBL.pobierz(oferta.Id_linielotnicze);
            }
            return tmp;
        }


        public bool aktualizujListe(ObservableCollection<Oferta> lista)
        {
            KategoriaBL katBL = new KategoriaBL();
            HotelBL hotelBL = new HotelBL();
            LinieLotniczeBL linielotniczeBL = new LinieLotniczeBL();
            foreach (Oferta oferta in lista)
            {
                if (oferta.Id_oferta == 0)
                {
                    this.dodaj(oferta);
                }
                else
                {
                    this.aktualizuj(oferta);
                    katBL.aktualizuj(oferta.Kategoria);
                    hotelBL.aktualizuj(oferta.Hotel);
                    linielotniczeBL.aktualizuj(oferta.Linielotnicze);

                }
            }
            return true;
        }

        public bool usun(ObservableCollection<Oferta> lista)
        {
            
            foreach (Oferta oferta in lista)
            {
                if(oferta.Id_oferta!=0)
                    this.usun(oferta.Id_oferta);
            }
            return true;
        }
    }
}
